home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 19 / 8 / DISK1987.ZIP / BSR.ARC / BSBR.DOC < prev    next >
Text File  |  1989-02-22  |  11KB  |  206 lines

  1. After purchasing a laptop computer (NEC Multispeed EL - I love it), I
  2. wanted a quick and easy way to send files from the laptop to another
  3. PC using the null-modem cable included with the laptop. I happen to have
  4. a 3 1/2 inch drive on my 'main' PC, but I wanted to be prepared for those
  5. times when I am visiting a client or friend, and he doesn't.
  6.  
  7. There are a number of 'bridge' products out there, but they all assume
  8. that you carry a 5 1/4" disk as well as a 3 1/2" everywhere you go. What
  9. I wanted was a simple BASIC program that could be typed in to the 'host'
  10. computer in five minutes or less, that would allow multiple file transfer
  11. with error correction.
  12.  
  13. It must be easy to run, and designed for direct connection between the PC
  14. and the laptop (no modems). The programs must also be short, so they don't
  15. take up too much room on the laptop's system disk.
  16.  
  17. The following two programs are the result of these design criteria. They
  18. work together to send data from the laptop to the host PC. (To send data
  19. back the other way, send the 'BS.BAS' program to the host and run it there.)
  20.  
  21. If you don't have a way to copy media from 5 1/4" to 3 1/2" floppies,
  22. these programs may do the trick for you. They can be a lifesaver in those
  23. special situations where you need file transfer fast. They are extremely
  24. simple to set up and run. They don't cost a dime, as long as you have
  25. BASICA or GWBASIC on each PC.
  26.  
  27. You can transfer any file or program with this utility, including COM,
  28. EXE, and DBF files, as well as word processing files.
  29.  
  30. If you need to do daily file transfer of large files, or you need to
  31. call in over a modem, get yourself a professional 'bridging' product.
  32. But for occasional or short file transfers, these programs should do
  33. the trick.
  34.  
  35. The limitations of these programs are obvious and straightforward. You
  36. can't do MS-DOS commands from one PC to the other, like some software
  37. does. Transferred files do not retain the original file date and time.
  38. All control is from the sending PC side. The software runs at 38400
  39. baud, but since BASIC only uses strings up to 255 characters, it isn't
  40. real fast.
  41.  
  42. Since you will probably be running this software with the PCs side
  43. by side, these limitations should not be irksome.
  44.  
  45. These programs may also be a helpful 'first step' in connecting your
  46. laptop to a host PC, so you can see how feasible the process itself is.
  47. Once you have decided whether to use a 'bridging' product or add a
  48. 3 1/2" disk drive to your host, you can forget these programs (until
  49. you are out on the road somewhere and need them at a client's office).
  50.  
  51. Keep in mid also that professional 'bridging' programs run at up to
  52. 38,400 baud (some even faster). This is four times as fast as the effective
  53. throughput of these programs.
  54.  
  55. At the current speed, direct connect, you will probably never see a trans-
  56. mission error. If you do, you may need to slow down your turbo processor,
  57. or even check out your COM port.  The software will retry error transmiss-
  58. ions up to 10 times (change the IF statement in the sending program if you
  59. want to alter this number).
  60.  
  61. These programs are set up for COM port 1. If one or the other PC needs to
  62. be COM2, change just that program. Change the line near the beginning of
  63. the program that says CML=1 to CML=2.
  64.  
  65. If you like the idea of these programs but hate to type, send me $20
  66. (cash or check) and I will send you both programs on BOTH a 3 1/2" and
  67. a 5 1/4" disk. I will also include printed documentation and a layout
  68. for the null-modem cable (both 9 pin and 25-pin versions). I'll also
  69. include our shareware BSR.EXE that transfers files at 115,200 baud.
  70.  
  71. If you haven't bought a laptop yet, you should strongly consider it.
  72. Even if you only work at home 3 hours a week, the availability of the
  73. laptop will pay for itself in less than a year. I would strongly urge
  74. you to find a laptop with at least 2 720k disks (or one and a hard
  75. drive), plus a parallel and serial port (even if it has an internal
  76. modem). It also helps to have a video output port. If you have to pay
  77. extra for these items, it can drive the cost way up.
  78.  
  79. To use these programs, type GWBASIC or BASICA at the MS-DOS prompt.
  80. Type the BS.BAS program in on the computer you want to send data from.
  81. Type the BR.BAS program in on the computer you want to receive data on.
  82. Connect the serial port of the sending computer to the serial port of the
  83. receiving computer with a null-modem cable (usually available from the
  84. manufacturer of the laptop, or you can purchase one at any computer
  85. store).
  86.  
  87. When you are typing in the programs, you don't have to type in the
  88. comments (anything after a single-quote character on a line).
  89.  
  90. Be sure to SAVE "BS",A on the sending computer, and SAVE "BR",A on
  91. the receiving computer, so you don't have to type the programs in
  92. again. Then type RUN on each computer.
  93.  
  94. On the sending computer, type the file name of each file you want to send.
  95. You can't use wildcards, but if you type in '=' instead of a file name,
  96. the sending program will list the files in the current directory. When
  97. you are through sending files, type a carriage-return (enter key), and
  98. the program will terminate.
  99.  
  100. When you are done sending files, type SYSTEM at the GWBASIC prompt "Ok".
  101. This will return you to MS-DOS on each system. The next time you want
  102. to run each program, type GWBASIC BS on the sending computer, and
  103. GWBASIC BR on the receiving computer.
  104.  
  105. Keep these programs on your laptop disk, and you will always have a way
  106. to transfer files no matter where you are. This "low-tech" solution works
  107. just fine for occasional file transfers and emergency situations.
  108.  
  109. Brad Jensen
  110. Datamate Company
  111. 4135 S 100th East Ave Suite 128
  112. Tulsa Ok 74146
  113.  
  114. Program Listings
  115.  
  116. 10 ' BS.BAS   by Brad Jensen Datamate Company PO Box 471404 Tulsa Ok 74147
  117. 20 ' sends files with checksum to PC running BR.BAS
  118. 30 ' use with BASICA or GWBASIC and COM1: or COM2:
  119. 40 CML = 1 ' change this to "CML = 2" for COM2:
  120. 50 IF CML = 1 THEN PORT=&H3F8:CM$="COM1":ELSE PORT = &H2F8:CM$="COM2"
  121. 60 CLOSE   'this cleans up if you Ctrl-Break'ed out of last transmit
  122. 70 ACK$=CHR$(1):NAK$=CHR$(2) ' reply characters from other PC
  123. 80 OPEN CM$+":9600,N,8,1,Cs,ds,cd" AS #1 ' open COM1: or COM2:
  124. 90 HOLD=INP(PORT+3):OUT PORT+3,HOLD OR &H80 ' change baud rate to 38400
  125. 100 OUT PORT,3:OUT PORT+1,0:OUT PORT+3,HOLD ' set baud to 38400
  126. 110 S$=SPACE$(130)
  127. 120 CLS:PRINT "Send file to PC " LS$
  128. 130 INPUT "File name (= for file list) ";FL$       ' no file name ends programs
  129. 140 IF FL$="" THEN LSET S$=CHR$(255)+"$@":GOSUB 390:LOCATE 12,1:END
  130. 150 IF FL$="=" THEN FILES:PRINT "Press Any Key":WHILE INKEY$="":WEND:GOTO 120
  131. 160 OPEN FL$ AS #2 LEN=128 ' the file may have any path name
  132. 170 ST=1 ' strip off path or disk name for transmit to host
  133. 180 FOR I=1 TO LEN(FL$):IF MID$(FL$,I,1) = ":" OR MID$(FL$,I,1)="\" THEN ST=I+1
  134. 190 NEXT I ' all files will be received to the current directory on the host
  135. 200 LSET S$=CHR$(255)+MID$(FL$,ST)+"@":GOSUB 390 ' send file name
  136. 210 FIELD #2,128 AS A$:FLEN=LOF(2)
  137. 220 PRINT FLEN "Bytes" ' number of bytes in file
  138. 230 GR=INT(FLEN/128):GR2=GR*128
  139. 240 LOCATE 4,1:PRINT "Blocks to send";GR
  140. 250 LOCATE 6,1:PRINT "Sending block";
  141. 260 START=TIMER
  142. 270 FOR I = 1 TO GR
  143. 280 GET #2,I
  144. 290  LOCATE 6,15:PRINT I;
  145. 300 LSET S$=CHR$(128)+A$:GOSUB 390   ' send full data block
  146. 310 NEXT I
  147. 320 IF GR2=FLEN THEN 380      ' file is exactly / 128
  148. 330 GET #2,INT(GR)+1
  149. 340 LSET S$=CHR$(FLEN-GR2)+A$:GOSUB 390 ' send last short block
  150. 350 LAST=TIMER:LS$=" Last file sent : "+FL$+STR$(FLEN)
  151. 360 LS$=LS$+" bytes at "+STR$(INT(FLEN/(LAST-START)))+" per second"
  152. 170 CLOSE #2    '  end of this file, go do another
  153. 380 LOCATE 2,1:PRINT SPACE$(80);:LOCATE 2,1:GOTO 120 ' next file
  154. 390 CK=0:FOR J = 1 TO 129:CK=CK+ASC(MID$(S$,J,1)):NEXT J ' checksum
  155. 400 CK=CK AND 255:MID$(S$,130,1)=CHR$(CK) ' add checksum to end
  156. 410 RETRY=0 ' allowable retries for possible error transmission
  157. 420 PRINT #1,S$; ' send block of data + checksum to host
  158. 430 WHILE LOC(1)=0:WEND:REPLY$=INPUT$(1,1) ' get ack (good) or nak (bad)
  159. 440 IF REPLY$<>ACK$ THEN RETRY=RETRY+1:IF RETRY < 10 THEN 420:ELSE 460
  160. 450 RETURN              ' transmission was good, ack was received
  161. 460 PRINT :PRINT "***Too many retries***":END ' errors in transmit
  162. 470 REM BS.bas
  163.  
  164.  
  165. 10 ' Read file from laptop (com1) Receives a file from BS.BAS
  166. 20 ' reads 130 byte 'records' from com port with header,data,checksum
  167. 30 ' if header = 255 then new file name else header=bytes to write
  168. 40 ' checksum = sum of data bytes + header
  169. 50 ' returns nak on bad transmission else ack
  170. 60 ' ends when Esc pressed or timeout or new file name is $
  171. 70 ' Brad Jensen Datamate Company PO Box 471404 Tulsa Ok 74147
  172. 80  CML = 1 ' change this line to "CML = 2" for COM2: port
  173. 90 IF CML = 1 THEN PORT=&H3F8:CM$="COM1":ELSE PORT=&H2F8:CM$="COM2"
  174. 100 TIMEOUT=120 ' seconds to timeout
  175. 110 OPEN CM$+":9600,N,8,1,cs,ds,cd" AS #1 'open COM1: or COM2:
  176. 120 HOLD=INP(PORT+3):OUT PORT+3,HOLD OR &H80 'chang ebaud from 9600 to 38400
  177. 130 OUT PORT,3:OUT PORT+1,0:OUT PORT+3,HOLD ' set baud to 38400
  178. 140 CLS:PRINT "Waiting for start of file transmission"
  179. 150 WHILE LOC(1)=0 AND INKEY$ <> CHR$(27):WEND  ' wait for transmit to start
  180. 160 CLS:PRINT "Receiving file"
  181. 170 A$="":ACK$=CHR$(1):NAK$=CHR$(2) ' used to signal good/bad checksum
  182. 180 FL$="NUL":GOTO 230 ' open the NUL device as the general case
  183. 190 LOCATE 2,1:CLOSE #2 ' close old file
  184. 200 FL$=LEFT$(FL$,INSTR(FL$,"@")-1) ' get file name in first block
  185. 210 IF FL$="$" THEN LOCATE 12,1:PRINT "All Done ":END ' signals end of transmit
  186. 220 PRINT "Writing to "FL$"                              "
  187. 230 OPEN FL$ FOR OUTPUT AS #2 ' file is always in current directory on this end
  188. 240 BLOCKS=0:A$="":B=TIMER:NEWFILE=0:BAD=0  ' initialize for this file
  189. 250 LOCATE 4,1:PRINT "Receiving Block ";
  190. 260 IF LEN(A$) < 130 THEN GOSUB 300:ELSE GOSUB 320:IF NEWFILE THEN 190 'get data
  191. 270 IF INKEY$=CHR$(27) THEN LOCATE 12,1:PRINT "ESCaped":END ' Esc cancels
  192. 280 IF TIMER-B < TIMEOUT THEN GOTO 260 ' no characters in n seconds , quit
  193. 290 LOCATE 12,1:PRINT "Timed out...":END
  194. 300 IF LOC(1) <> 0 THEN A$=A$+INPUT$(LOC(1),1):B=TIMER ' get from com
  195. 310 RETURN
  196. 320 ALEN=LEN(A$):CK=0:BAD=-1  ' checksum calculation
  197. 330 FOR I = 1 TO ALEN-1:CK=CK+ASC(MID$(A$,I,1)):NEXT I:CK=CK AND 255
  198. 340 IF CHR$(CK) <> MID$(A$,ALEN,1) THEN A$="":PRINT #1,NAK$;:RETURN ' bad !
  199. 350 IF MID$(A$,1,1)=CHR$(255) THEN NEWFILE=-1:FL$=MID$(A$,2,ALEN-2):GOTO 390
  200. 360 BLEN=ASC(MID$(A$,1,1)) ' normally 128 bytes except last file block
  201. 370 PRINT #2,MID$(A$,2,BLEN);  ' print except for header & checksum byte
  202. 380 LOCATE 4,20:BLOCKS=BLOCKS+1:PRINT BLOCKS;
  203. 390 PRINT #1,ACK$;:BAD=0:A$="" ' not bad, good
  204. 400 RETURN      ' done receiving this block
  205. 410 REM BR.BAS
  206.